"""
1、概述：Transaction，由存储引擎实现（简答讲，事务就是要完成的一件事，如购物）
        可以用来维护数据库的完整性，要么全部执行，要么全部不执行
        用来管理DDL、DML、DCL操作
2、基本操作：
     ① 开启事务：start/begin transaction  (任何一条DML语句 - insert/update/delete 执行，标志事务的开启)
     ② 提交事务：commit transaction       (成功的结束，将所有的DML语句操作历史记录和底层硬盘数据来一次同步)
     ③ 回滚事务：rollback transaction     (失败的结束，将所有的DML语句操作历史记录全部清空)
      银行转帐：
        use test1;
        create table account(
            id int primary key,
            name varchar(20),
            money double
        );
        insert into account values(1,'张三', 1000);
        insert into account values(2,'李四', 1000);
        select @@autocommit;  -- 查看自动提交（默认为1，即为开启状态）
        set autocommit = 0;   -- 关闭自动提交
      start;
      update account set money = money - 200 where id = 1;   -- 张三转200给李四
      update account set money = money + 200 where id = 2 ;
      commit;
      rollback;（数据返回至最开始的原始值）
      select * from account;  -- select 查看到的数据是更新之后的，和commit同步（相反，表中的数据刷新后处于滞后状态，必须commit后才更新）
3、四大特性
    A-原子性：atomicity,不可再分，事务是一个不可分割的整体，事务开始后的所有操作，要么全部完成，要么全部不做
    C-一致性：consistency,系统从一个正确的状态，迁移到另一个正确的状态（不管怎么变动，数据总计和状态保持一致）
    I-隔离性：isolation,每个事务的对象对其他事务的操作对象互相分离，事务提交前对其他事务不可见
            （终端1没有commit，终端2无法操作，处于等待状态，终端1commit后，终端2会同步继续操作）
    D-持久性：durability,事务一旦提交，其结果是永久性的（即使系统崩溃，也不会影响结果）
4、隔离级别
     ① 概述：isolate
        read uncommitted    读未提交     --  会造成脏读，不可重复读，幻读
        read committed      读提交      --  会造成不可重复读，幻读
        repeatable read     可重复读    --  会造成幻读（默认的）
        serializable        序列化/串行  --  可避免以上问题，但效率底下哎，比较耗数据库性能（一般不用）
           注意：未提交（关联最紧密，隔离级别最差），序列化（最疏松，隔离级别最高）
     ② 操作
         查看隔离级别：show variables like '%isolation%';
         设置隔离级别：set session transaction isolation level read uncommitted;（A事务可以看到B事务没有提交的数据--造成脏读）
                    set session transaction isolation level read committed;  （A事务在B事务没有提交之前，看到不同的数据--造成不可重复读）
                    set session transaction isolation level repeatable read; （A事务在B事务提交之前和提交之后看到不同的数据--造成幻读）
                    set session transaction isolation level serializable;    （A事务操作表时，表会被锁起，B事务不能操作--比较安全，效率低）
"""